<?php
/**
 * memcache 操作类
 * @author yangzhiguo0903@163.com
 */
defined('IN_LK') or die('Access Denied');
final class cache_memcache
{
	/**
	 * memcache句柄
	 */
	private static $memcache = null;
	
	/**
	 * 初始化应用程序
	 */
	public function __construct()
	{
		self::connect();
	}
	
	/**
	 * 建立memcache
	 *
	 */
	private static function connect()
	{
		if(self::$memcache)
		{
			return true;
		}
		self::$memcache = new memcache;
		self::$memcache->connect(MEMCACHE_HOST, MEMCACHE_PORT) or die('Could not connect memcache');
	}
	
	/**
	 * memcache set 设置数据 Store data at the server
	 * @param string $key   变量名
	 * @param mixed  $value 变量值
	 * @param int    $flag  是否启用压缩
	 * @param int    $expire 有效期
	 * @return boolean
	 */
	public function set($key, $value, $flag = MEMCACHE_COMPRESSED, $expire = MEMCACHE_TTL)
	{
		return self::$memcache->set(MEMCACHE_PREFIX . $key, $value, $flag, $expire);
	}
	
	/**
	 * memcache replace 替换原数据 replace data at the server
	 * @param string $key   变量名
	 * @param mixed  $value 变量值
	 * @param int    $flag  是否启用压缩
	 * @param int    $expire 有效期
	 * @return boolean
	 */
	public function replace($key, $value, $flag = MEMCACHE_COMPRESSED, $expire = MEMCACHE_TTL)
	{
		return self::$memcache->replace(MEMCACHE_PREFIX . $key, $value, $flag, $expire);
	}
	
	/**
	 * memcache get 取得数据
	 * @param string/array $key 变量名
	 * @return mixed
	 */
	public function get($key, $flag = MEMCACHE_COMPRESSED)
	{
		if(!$key)
		{
			return false;
		}
		return self::$memcache->get(MEMCACHE_PREFIX . $key, $flag);
	}
	
	/**
	 * memcache delete 删除数据
	 * @param string/array $key 变量名
	 * @return boolean
	 */
	public function delete($key)
	{	
		if(!$key)
		{
			return false;
		}
		return self::$memcache->delete(MEMCACHE_PREFIX . $key);
	}
	
	/**
	 * 刷新缓冲区
	 */
	public function flush()
	{
		return self::$memcache->flush();
	}
	
	/**
	 * 关闭连接
	 */
	public function __destruct()
	{
		self::$memcache->close();
	}
}